﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Autoverwaltung.Model
{
    public class Auto : IAutoverwaltungModel, IEquatable<Auto>
    {
        /// <summary>
        /// Das Modell, welchem das Auto
        /// zugeordnet ist.
        /// </summary>
        public Modell Modell { get; set; }

        /// <summary>
        /// Die Kraftstoffsorte, welche das
        /// Auto benötig.
        /// </summary>
        public string Kraftstoff { get; set; }

        /// <summary>
        /// Die Leistung des Autos in PS.
        /// </summary>
        public int Leistung { get; set; }

        /// <summary>
        /// Die Größe des Motors in Kubik.
        /// </summary>
        public int Hubraum { get; set; }

        /// <summary>
        /// Die Anzahl an Zylindern, die das
        /// Auto (der Motor) besitzt.
        /// </summary>
        public int Zylinder { get; set; }

        /// <summary>
        /// Der Verbrauch des Autos, innerorts
        /// außerorts und kombiniert.
        /// </summary>
        public Verbrauch Verbrauch { get; set; }

        /// <summary>
        /// Die Farbe des Autos. :)
        /// </summary>
        public Color Farbe { get; set; }

        /// <summary>
        /// <see cref="Autoverwaltung.Model.IAutoverwaltungsModel"/>
        /// </summary>
        public int Id { get; set; }

        public bool Equals(Auto other)
        {
            if (other == null)
            {
                return false;
            }

            bool modellCheck = (this.Modell != null && this.Modell.Equals(other.Modell) || this.Modell == null && other.Modell == null);
            bool kraftstoffCheck = (this.Kraftstoff != null && this.Kraftstoff.Equals(other.Kraftstoff) || this.Kraftstoff == null && other.Kraftstoff == null);
            bool verbrauchCheck = (this.Verbrauch != null && this.Verbrauch.Equals(other.Verbrauch) || this.Verbrauch == null && other.Verbrauch == null);


            return this.Id.Equals(other.Id) && this.Leistung.Equals(other.Leistung) &&
                this.Hubraum.Equals(other.Hubraum) && this.Zylinder.Equals(other.Zylinder) &&
                this.Farbe.Equals(other.Farbe) && modellCheck && kraftstoffCheck && verbrauchCheck;

        }
    }
}
